package 二叉树练习题;

/**
 * 用给定的二叉树的根结点root来构造新的二叉树的方法：首先创建新的结点dupTree，
 * 然后根据root结点来构造dupTree结点（dupTree.data=root.data），
 * 最后分别用root的左右子树来构造dupTree 的左右子树。
 * 根据这个思路可以实现二叉树的复制，
 * 使用递归方式实现的代码如下
 */
public class J如何复制二叉树 {
    public static BiTNode createdupTree(BiTNode root) {
        if (root == null) {
            return null;
        }
        //二叉树根节点
        BiTNode dupTree = new BiTNode();
        dupTree.data = root.data;
        //复制左子树
        dupTree.lchild = createdupTree(root.lchild);
        dupTree.rchild = createdupTree(root.rchild);
        return dupTree;
    }

    public static void printTreeMidOrder(BiTNode root) {
        if (root == null) {
            return;
        }
        if (root.lchild != null) {
            printTreeMidOrder(root.lchild);
        }
        System.out.print(root.data + " ");
        if (root.rchild != null) {
            printTreeMidOrder(root.rchild);
        }
    }

    public static void main(String[] args) {
        int arr[] = {1, 2, 3, 4, 5, 6, 8};
        BiTNode root1 = B如何把一个有序的整数数组放到二叉树中.arraytotree(arr, 0, arr.length - 1);
        BiTNode root2 = createdupTree(root1);
        printTreeMidOrder(root1);

        System.out.println();
        printTreeMidOrder(root2);
    }
}
